/*
 *Autor: Anderson Campos Cardoso
 *
 *Conteúdo: Arquivo que contém a implementação dos métodos da classe Animacao
 */

#include "Animacao.h"

#ifndef _ANIMACAO_CPP_
#define _ANIMACAO_CPP_

using namespace std;

/*
 * Detecta qual o quadro correspondente e atualiza corrtamente o Retangulo da
 * imagem de origem do Sprite com a imagem correspondente ao quadro
 */
Uint32 Animacao::animar(SDL_Rect *proximoRect)
{
   /* se chegar ao último quadro da última imagem,
    * o quadro recebe 1 para continuar o loop das imagens
    */
   deltaTempo += relogio->getDeltaTempo();
   if( deltaTempo >= ((unsigned int) (qtdeImagens)*duracaoQuadros))
   {
      deltaTempo = deltaTempo%duracaoQuadros;
   }
   proximoRect->x = (deltaTempo/duracaoQuadros)*largura; /*posição x do sprite no arquivo de imagens, depende do quadro em que se encontra e da largura das imagens*/
   proximoRect->y = (linhaAnimacao -1)*altura; /*posição y do sprite no arquivo de imagens, depende somente da linha e altura das imagens*/
   proximoRect->w = largura; /*largura da imagem*/
   proximoRect->h = altura;  /*altura da imagem*/

   return deltaTempo;
}

/*
 *Configura os atributos da classe
 */
Animacao::Animacao(Relogio *p_relogio, Uint16 p_qtdeImagens, Uint16 p_altura, Uint16 p_largura, Uint16 p_duracaoQuadros, Uint16 p_linhaAnimacao)
{
   deltaTempo      = 0;
   relogio         = p_relogio;
   qtdeImagens     = p_qtdeImagens;
   altura          = p_altura;
   largura         = p_largura;
   duracaoQuadros  = p_duracaoQuadros;
   linhaAnimacao   = p_linhaAnimacao;
}

/*
 *Destrutor da classe
 */
Animacao::~Animacao(void)
{

}


#endif

